package com.yuanqi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yuanqi.entity.WareGrn;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author HP
* @description 针对表【ware_grn(入库单)】的数据库操作Service
* @createDate 2025-08-28 16:04:07
*/
public interface WareGrnService extends IService<WareGrn> {

    /**
     * 分页查询入库单
     * @param page 页码
     * @param size 每页大小
     * @param grnCode 入库单号
     * @param warehouseId 仓库ID
     * @param status 状态
     * @return 分页数据
     */
    IPage<WareGrn> listGrns(Integer page, Integer size, String grnCode, Long warehouseId, Integer status);

    /**
     * 获取入库单详情
     * @param id 入库单ID
     * @return 入库单详情，包含入库明细项
     */
    Map<String, Object> getGrnDetail(Long id);

    /**
     * 创建入库单
     * @param grn 入库单信息
     * @param items 入库单明细项
     * @return 是否成功
     */
    boolean createGrn(WareGrn grn, List<Map<String, Object>> items);

    /**
     * 提交入库单审核
     * @param id 入库单ID
     * @return 是否成功
     */
    boolean submitGrn(Long id);

    /**
     * 审核入库单
     * @param id 入库单ID
     * @return 是否成功
     */
    boolean approveGrn(Long id);

    /**
     * 驳回入库单
     * @param id 入库单ID
     * @return 是否成功
     */
    boolean rejectGrn(Long id);

    /**
     * 执行入库
     * @param id 入库单ID
     * @return 是否成功
     */
    boolean executeGrn(Long id);

    /**
     * 更新入库单
     * @param grn 入库单信息
     * @param items 入库单明细项
     * @return 是否成功
     */
    boolean updateGrn(WareGrn grn, List<Map<String, Object>> items);
    
    /**
     * 获取入库记录
     * @param grnCode 入库单号
     * @param productName 商品名称
     * @param warehouseId 仓库ID
     * @param skuId 商品SKU ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 入库记录列表
     */
    List<Map<String, Object>> getGrnRecords(String grnCode, String productName, Long warehouseId, Long skuId, String startDate, String endDate);
}
